package com.lcx.listener;


import jdk.internal.org.objectweb.asm.*;
import jdk.internal.org.objectweb.asm.tree.AnnotationNode;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class ClassVistorAnnocationFack {

    private List<AnnotationNode> annotationNodes = new ArrayList<>(2);

    private ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM4) {
        @Override
        public AnnotationVisitor visitAnnotation(String s, boolean b) {
            AnnotationNode annotationNode = new AnnotationNode(s);
            if(b){
                annotationNodes.add(annotationNode);
            }
            return annotationNode;
        }
    };

    private ClassReader classReader;

    public List<AnnotationNode> getAnnotationNodes(){
        return annotationNodes;
    }

    public boolean checkHashAnnocation(Class<?> ann){
        if(!annotationNodes.isEmpty()){
            return annotationNodes.stream().anyMatch(e-> ann.getName().equals(Type.getType(e.desc).getClassName()));
        }
        return false;
    }

    public void accept(InputStream is){
        try{
            annotationNodes.clear();
            classReader = new ClassReader(is);
            classReader.accept(classVisitor,0);
        }catch (Exception e){
        }finally {
            try{
                is.close();
            }catch (Exception e){}
        }
    }

}
